#ifndef REPORTWIDGET_H
#define REPORTWIDGET_H

#include <QWidget>
#include <QJsonObject>
class QPrinter;
class ImageLabel;

namespace Ui {
class ReportWidget;
}

class ReportWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ReportWidget(QWidget *parent = 0);
    ~ReportWidget();

    void openReport(const QByteArray &json);
    void openReportFile(const QString &json);

signals:
    void reportModified(bool yes = true);
    void reportCompleted(bool yes);
    void reportVerified(bool yes);
    void reportSave(const QStringList &files);
    void paperChanged(const QString &paper);
    void titleChanged(const QString &title);
    void postReport(const QByteArray &json);
    void downloadImages(const QStringList &images);

public slots:
    void reflushReportFormat();
    void loadImage(const QString &png);
    ImageLabel *insertImage(const QPixmap &pixmap, bool modified = true);
    bool saveReport();
    void completeReport();
    void revokeComplete();
    void verifyReport();
    void revokeVerify();
    void print();
    void printToPDF();
    void printPreview();
    void setPaper(const QString &paper);
    void appendTemplateContents(const QString &findings, const QString &conclusion);
    void setCacheDir(const QString &dir) { cacheDir = dir; }
    void clearImages();
    void setReadOnly(bool yes);
    void setStatus(int status);

private slots:
    void doPrint(QPrinter *printer);
    void onImageRemoved();

private:
    void setupConnections(bool conn);
    void initLogicalDpi();


    Ui::ReportWidget *ui;
    QList<ImageLabel*> imgLabels;
    QByteArray report;
    QString cacheDir;
    int m_status;

    int xLogicalDpi;
    int yLogicalDpi;
};

#endif // REPORTWIDGET_H
